import random

def get_random_gift(n):

    gifts = [] # 原始礼物数组
    for i in range(0, n):
        gifts.append(i)

    result = [] # 分配结果

    i = 0 # 正在给第几个人分配礼物
    while i < n:
        gift = random.choice(gifts) #随机选择一个礼物
        if gift != i: # 选择的礼物符合要求
            result.append(gift)
            gifts.remove(gift) # 移除已被选择的礼物
            i += 1 # 给下一个人分配
        elif gift == i and i == n-1:  #处理特殊情况：
            # gift == i 且已经是最后一个人了，则将他的礼物与前面的任意一个人交换礼物
            result.append(gift)
            random_idx = random.randint(0, n-2) # 闭区间
            result[random_idx], result[n-1] = result[n-1], result[random_idx]
            break

    return result


result = get_random_gift(5)
print(result)